#pragma once

#include <iostream>
#include <string>
#include <ctime>

#define INFO    1
#define WARNING 2
#define ERROR   3
#define FATAL   4

#define LOG(level, message) Log(#level, message, __FILE__, __LINE__)
// 这是一个宏定义，它的作用是简化日志记录的操作
// Log(#level, message, __FILE__, __LINE__) 是宏展开后的内容。
// #level 是字符串化操作符 # 的应用，它会将宏参数 level 转换为一个字符串。例如，如果调用 LOG(INFO, "Server started")，#level 会将 INFO 转换为字符串 "INFO"。
// message 是直接传递给 Log 函数的日志信息。
// __FILE__ 是一个预定义的宏，它在程序编译时就会被替换为当前源文件的文件名。
// __LINE__ 也是一个预定义的宏，它在程序编译时就会被替换为当前代码行的行号。


void Log(std::string level, std::string message, std::string file_name, int line)
{
    std::cout << "[" << level << "]" << "[" << time(nullptr) << "]" 
    << "[" << message << "]" << "[" << file_name << "]" << "[" << line << "]" << std::endl;
}
